home *** CD-ROM | disk | FTP | other *** search
/ Graphics Plus / Graphics Plus.iso / info / rtnews / rtnews3 < prev    next >
Encoding:
Text File  |  1994-10-16  |  46.9 KB  |  1,216 lines

  1.  
  2.  _ __                 ______                         _ __
  3. ' )  )                  /                           ' )  )
  4.  /--' __.  __  ,     --/ __  __.  _. o ____  _,      /  / _  , , , _
  5. /  \_(_/|_/ (_/_    (_/ / (_(_/|_(__<_/ / <_(_)_    /  (_</_(_(_/_/_)_
  6.              /                               /|
  7.             '                               |/
  8.  
  9.             "Light Makes Right"
  10.  
  11.              April 6, 1988
  12.  
  13. Compiled by Eric Haines, 3D/Eye Inc, ...!hplabs!hpfcla!hpfcrs!eye!erich
  14. All contents are US copyright (c) 1988 by the individual authors
  15.  
  16.  
  17. New Distributor Address
  18. -----------------------
  19.  
  20. I have been trying to switch over to something faster, cheaper, and more
  21. reliable than uucp mail.  As you (hopefully) know, I have sent you test
  22. messages, to which about 2/3rds the mailing list has replied.  If you receive
  23. this issue of the RT News with a return address of "...!eye!erich", then I have
  24. NOT received your reply.  Write to:
  25.  
  26.     saponara@tcgould.tn.cornell.edu
  27.  
  28. Those who have successfully replied will get it with the "saponara" return
  29. address.  Please consider "...!eye!erich" to still be my mailing address - the
  30. other account is "on loan" and may disappear someday.  By the way, the new
  31. mailing list is attached at the end of this issue.
  32.  
  33. -- Eric
  34.  
  35. -----
  36.  
  37. Contents:
  38.     RT News, hardcopy form (Andrew Glassner)
  39.     node changes (Paul Heckbert & Brian Barsky, Darwyn Peachey)
  40.     new members (Cary Scofield, Michael Cohen, John Chapman)
  41.     question for the day (Rod Bogart)
  42.     Re: Linear-time voxel walking for BSP (Erik Jansen)
  43.     some thoughts on the theory of RT efficiency (Jim Arvo)
  44.     Automatic Creation of Object Hierarchies for Ray Tracing (Eric Haines)
  45.     Best of USENET (Tait Cyrus, Todd Elvins)
  46.  
  47. -----------------------------------------------------------------------------
  48.  
  49. from: Andrew Glassner
  50. subject: RT News, hardcopy form
  51.  
  52. I was surprised that there are still some folks on the softcopy list
  53. not on the hardcopy list.  On the next mailing, please ask anyone on
  54. the electronic list who isn't getting the hardcopy (but wants to) to
  55. drop me a line, electronically (glassner@cs.unc.edu) or physically
  56. at the Department of Computer Science, UNC-CH, Chapel Hill, NC 27599-3175.
  57.  
  58. -Andrew
  59.  
  60. -----------------------------------------------------------------------------
  61.  
  62. subject: node changes
  63.  
  64. [the gist:  change the net addresses of Brian Barsky, Paul Heckbert, Don Marsh,
  65. and Michael Hohmeyer's "degas" node to "miro".  Change Darwyn Peachey to Pixar]
  66.  
  67.  
  68. from: Paul Heckbert
  69.  
  70. My net address is changing from ph@degas.berkeley.edu to ph@miro.berkeley.edu
  71. (we're switching from an impressionist to a more modern artist)
  72.  
  73. Although the machine "degas" is being phased out, mail to my old address
  74. should continue to reach me, but the new address is faster and more reliable.
  75.  
  76.  
  77. from: Brian Barsky
  78.  
  79. Degas is going away.  Mail should get to me as "barsky@berkeley.edu" on
  80. the ARPAnet and as "...ucbvax!barsky" on Usenet.  My machine is "beta",
  81. but that shouldn't be necessary in the address.
  82.  
  83.  
  84. from: Darwyn Peachey
  85.  
  86. Change of address:
  87.  
  88.     pixar!peachey@ucbvax.Berkeley.EDU
  89.         - or -
  90.     {sun,ucbvax}!pixar!peachey
  91.  
  92. -----------------------------------------------------------------------------
  93.  
  94. subject: new people
  95.  
  96. from: Cary Scofield
  97.  
  98.     Please add my name to the Ray Tracing News mailing list. You can
  99. use the same address(es) you use for Jim Arvo or Olin Lathrop or the
  100. one I give you below.  I really enjoy reading RTN -- very enlightening
  101. stuff!
  102.  
  103.                                     Thanks, 
  104.  
  105.                                         Cary Scofield
  106.                                         Apollo Computer Inc.
  107.                                         270 Billerica Rd.
  108.                                         Chelmsford MA 01824
  109.  
  110.                                         apollo!scofield@eddie.mit.edu
  111.  
  112. > Could you please write up a paragraph about yourself which I
  113. > could include next issue as an introduction?
  114.  
  115. I don't know that there is much about myself worth talking about, but here
  116. goes ...
  117.  
  118. I've been working off-and-on with 3D graphics applications and systems
  119. for about 9 years ... started at Apollo 4 1/2 years ago ... been
  120. working on  Apollo's 3dGMR and Raytracer packages ... presently in
  121. part-time pursuit of an MS in Systems Engineering at Boston Univ. ...
  122. my prevailing interests nowadays are in finding and developing a
  123. suitable software architecture for an image sythesis system that is
  124. network-distributable and user-extensible.
  125.  
  126.                                         - Cary Scofield
  127.  
  128. -------
  129.  
  130. from: John Chapman
  131.  
  132. [John is presently doing grad. work in computer graphics]
  133.  
  134. Yes I'd like to be on the list - getting the back issues would be great,
  135. thanks!  The most stable email address for me is:
  136.  ...!ubc-cs!fornax!sfu_cmpt!chapman
  137. although this may change shortly nothing sent to it will be lost.
  138. Fastest response address for short notes is still ...fornax!bby-bc!john
  139.  
  140.  
  141. --------
  142.  
  143. from: Eric Haines
  144.  
  145. Michael Cohen has also been added to the list.  He should be well known to
  146. anyone who has read anything about radiosity, and has also done work in
  147. ray tracing (his latest efforts with John Wallace resulting in an algorithm
  148. for combining radiosity and ray tracing [Siggraph '87, last article]).  In
  149. 1983 we both entered the Program of Computer Graphics at Cornell, and after
  150. graduation he stayed on as a professor.  Embarrassingly enough, I thought
  151. that he was on the RT News mailing list (most of the PCG staff are) - anyway,
  152. he's been added:
  153.  
  154.     cohen@squid.tn.cornell.edu
  155.  
  156. -----------------------------------------------------------------------------
  157.  
  158. subject: question for the day
  159. from: Rod Bogart
  160.  
  161. I actually do have a ray tracing question.  There has been mucho
  162. noise on the net about "point in poly".  Around here, we raytrace
  163. triangles.  So, what is the fastest reliable way to intersect a
  164. ray with a triangle and also get back barycentric coordinates?
  165.  
  166. We subdivide our B-spline patches into a hierarchy of bounding
  167. volumes with triangles at the leaves.  We preprocess the triangles
  168. by calculating a matrix to aid the intersection process.  The problem
  169. is, the matrix must be inverted, and doesn't always cooperate (this
  170. usually fails for triangles nearly aligned with a coordinate plane).
  171. Is there a favorite way of storing a triangle (instead of our failing
  172. matrix) so that the intersection returns barycentric coordinates
  173. (r,s,t) all 0 to 1?
  174.  
  175. You don't need to bother the rest of the RT gang, if you have solution
  176. of which you are confident.
  177.  
  178. Thanks,
  179. RGB
  180.  
  181. -----------------------------------------------------------------------------
  182.  
  183. From: erik jansen
  184. Subject: Re: Linear-time voxel walking for BSP
  185.  
  186. I have some experience with the 'recursive' ray traversal (as I called it)
  187. described by Jim Arvo. The first implementation dates from fall'83 (as 
  188. mentioned in the previous RT news). I presented the idea during the 
  189. workshop 'Data structures for raster graphics' (June 1985) and I compared
  190. it there with the 'sequential' traversal and did the suggestion that both
  191. methods can also be applied to a hierarchical box structure. See:
  192.  
  193.   F.W. Jansen, 'Data structures for ray tracing', 
  194.   In: 'Data structures for raster graphics', Proceedings workshop,
  195.   Kessener, L.R.A, Peters, F.J., Lierop, M.L.P. van, eds., 57-73,
  196.   Eurographics Seminars, Springer Verlag, 1986.
  197.  
  198. In my thesis 'Solid modeling with faceted primitives', (Sept. 1987) it is 
  199. discussed on the pages 63-66. 
  200. I agree that these sources are rather obscure and not known to people
  201. (let say) outside the Netherlands. Here follows a summary of the pages of
  202. my thesis:
  203.  
  204. The (sequential) ray tracing algorithm for the (BSP) cell structure
  205. proceeds by local access. First the intersection of the ray with the total 
  206. structure is calculated, then the cells are stepwise traversed by calculating 
  207. the intersection of the ray with the cell planes and determining which cell 
  208. is traversed next. The spatial index (directory) is used to access the data
  209. in the cell. (..).
  210. The index in the directory is found by an address computation on the 
  211. coordinates of a query point (for all points within a cell, the address 
  212. computation function gives the same index value) (This is the EXCELL 
  213. directory method see Tamminen Siggraph'83). A similar method is described 
  214. in [Fujimoto et al., 1986] for traversing an octree space subdivision: a 
  215. neighbour finding technique on the basis of octree indexes. Both methods 
  216. are better than the method described in [Glassner, 1984], which classifies 
  217. each point by descending the complete octree. 
  218. (..)
  219. Another method is feasible: a tree traversal method for the cell structure.
  220. This method uses a cell structure that is created by a binary subdivision.
  221. This recursive ray traversal method intersects the cell structure and 
  222. recursively subdivides the ray and proceeds with the partitioning (collection 
  223. of cells) first intersected. If the ray interval only intersects a single 
  224. cell then the data in that cell is tested for intersection with the ray.
  225. (..)
  226. Both algorithms have been implemented but no clear differences in 
  227. performance could be found: the average number of cells traversed for 
  228. each ray is more than two or three, which would be beneficial for the 
  229. sequential traversal, but it is not large enough to justify the initial
  230. cost of the recursive ray traversal. (..).
  231. (..)
  232. The total processing time for the ray tracing breaks down into the following
  233. components: cell traversal, intersection and shading.
  234. Their contributions are depicted in fig.(..), which shows that the intersection
  235. is still the major time-consuming activity.
  236. The constant time performance is confirmed by the results of fig. (..).
  237. Unfortunately, the constant time is constantly very high. (sigh)
  238.  
  239. So far my thesis and exactly what was predicted by Jim. In some test examples
  240. (for instance a simple set up with five elementary volumes (a few thousand
  241. polygons)) the average number of cells traversed was about 5.
  242.  
  243. The original idea was not to eliminate the number of internal nodes that
  244. are traversed (because I use the EXCELL indexing method) but to avoid the
  245. cell plane intersections. First I calculate the intersection of the ray with
  246. the six bounding planes of the world box. I put xmin, xmax, ymin, ymax, zmin
  247. and zmax on a stack and I half each time the ray segment for x, y and z 
  248. alternatively. Further, while subdividing the ray I also half the directory
  249. index range of the EXCELL directory (this requires another filling of the 
  250. directory than in the original method) and when the range contains only
  251. one index then the leaf level has been reached and the ray intersection
  252. with the cell data can be done. (If this is unclear I can give a more 
  253. elaborated explanation next time).
  254. It will be clear that I can not use with my method arbitrary partitioning
  255. planes.
  256.  
  257. An important point is the actual coding. My implementation was in Pascal
  258. and I can imagine much better programs than I can write. 
  259.  
  260. -----------------------------------------------------------------------------
  261.  
  262. from: Jim Arvo
  263. subject: some thoughts on the theory of RT efficiency
  264.  
  265. [Jim is writing the course notes on efficiency for the "Introduction to
  266. Ray Tracing" course at this year's Siggraph.  He sent this on to me
  267. and mentioned I could pass them on to all.  Enjoy! - EAH]
  268.  
  269.     Yes, I did receive the latest RT news with my octree stuff in it.  By
  270.     the way, it occured to me that you mentioned something about walking up 
  271.     an octree to find the nearest common ancestor between a voxel and its 
  272.     neighbor.  Olin and I have been discussing this, and I'm quite sure that
  273.     it's equivalent to the algorithm I described (but it's NOT immediately
  274.     obvious).  The important fact is that neighboring voxels in an octree
  275.     have a common ancestor which is two steps up (on average) regardless of
  276.     the depth of the octree.  This is what gets rid of the log N factor.
  277.  
  278.     With respect to "A Characterization of Ten Ray Tracing Efficiency 
  279.     Algorithms", I'm hoping that my section of the course notes will
  280.     take a good first step toward filling this need.  There's obviously an
  281.     infinite amount of work to be done here, especially considering that
  282.     ray tracing is on very shaky theoretical grounds as it stands.
  283.     Not that we have any doubts that it works!  We just can't say 
  284.     anything very convincing about how good our optimizations are at 
  285.     this point.  We clearly have to do some of the things you suggested
  286.     in your last message, or possibly go back to square one and try to
  287.     create a formal "ray tracing calculus" which we can actually prove
  288.     things about.  And, of course, I agree totally that we need to get a 
  289.     good handle on the strengths of the various techniques in order for 
  290.     something like annealing to have any chance at all.
  291.  
  292.     By the way, while writing the course notes I realized that there is a 
  293.     nice connection between the light buffer, the "ray coherence theorem" 
  294.     [Ohta/Maekawa 87], and ray classification.  If you start with a 
  295.     "direction cube" (like the hemicube of radiosity) and cross it with 
  296.     (i.e. form the cartesian product with) different "sets", you get the 
  297.     central abstractions which these algorithms are based upon.  Like so:
  298.  
  299.  
  300.     light buffer  -----  ray coherence theorem  -----  ray classification
  301.  
  302.      directions              directions                    directions
  303.          x                        x                            x
  304.        points                 "objects"                     "space"  
  305.  
  306.  
  307.     This is a very simple observation, but I think it makes the different
  308.     uses of direction easier to visualize, and certainly easier to explain.
  309.     All three use sorted object lists associated (directly or indirectly) 
  310.     with "cells" of a subdivided direction cube.  I think these three 
  311.     algorithms form a nice well-rounded section on "directional techniques."
  312.  
  313.     Well, back to the salt mine...
  314.  
  315.                                                                    -- Jim
  316.  
  317. --------more
  318.  
  319.     I want to get your opinion concerning the correspondence between 
  320.     the light buffer, the "ray coherence" algorithm, and ray classification
  321.     which I mentioned previously.  In particular, I have the following
  322.     chart which I'd like to include in my section of the course notes and,
  323.     since the light buffer is your baby, I'd like you to tell me
  324.  
  325.         1) If I've represented it fairly
  326.  
  327.         2) If there are other criteria which you think might 
  328.            be helpful to add to the chart
  329.  
  330.     Here is the chart (which is actually just a figure in the context of
  331.     a more detailed discussion):
  332.  
  333.  
  334.                     Light Buffer     Ray Coherence      Ray Classification
  335.                     ------------     -------------      ------------------
  336.  
  337.     Directions      Points            Objects           Space
  338.     crossed with    (representing     (including        (bounding the
  339.     ------------    light sources)    light sources)    environment)
  340.  
  341.  
  342.     Applied to      shadowing rays    all rays          all rays
  343.     ----------
  344.  
  345.     Type of         polygonal         unrestricted      unrestricted
  346.     environment   (can be extended)
  347.     -----------
  348.  
  349.     When data
  350.     structure       preprocessing     preprocessing     lazily during
  351.     is built                                            ray tracing
  352.     ---------
  353.  
  354.     Direction       uniform           uniform           adaptive
  355.     subdivision                                         via quadtree
  356.     -----------
  357.  
  358.     Construction    modified          "coherence        "object class-
  359.     of item list    polygon ras-      theorem" applied  ification" using
  360.     ------------    terization        to all pairs of   hierarchy of
  361.                                       objects           beams
  362.  
  363.     Parameters      number of         number of         max tree depth,
  364.     ----------      direction         direction         max item list size,
  365.                     cells             cells             truncation size, etc.
  366.  
  367.     Item list       constant time     constant time     Traversal of 2D or
  368.     Lookup                                              5D hierarchy and   
  369.     ---------                                           caching.
  370.  
  371.  
  372.     Also, have you given any thought to adaptive subdivision or lazy
  373.     evaluation?  Are there other interesting extensions that you'd care
  374.     to mention?
  375.  
  376.     [I still haven't replied - soon! (tonight, if I can help it)]
  377.  
  378. -----------------------------------------------------------------------------
  379.  
  380. from: Eric Haines
  381.  
  382. Automatic Creation of Object Hierarchies for Ray Tracing
  383. --------------------------------------------------------
  384.  
  385. This document is an explanation of the ideas presented by Goldsmith and Salmon
  386. in their May '87 paper in IEEE CG&A.  Some changes to their algorithm have been
  387. made for additional efficiency during ray tracing (though additional cost for
  388. the preprocess).  
  389.  
  390. The problem is that you are given a list of objects and wish to create a near
  391. optimal hierarchy of bounding volumes to contain these objects.  The basic idea
  392. is to create the tree as we go, adding each node at whatever location seems
  393. most optimal.  To avoid searching through the whole tree, we work from the top
  394. down and figure out which child branch is most worth looking at.
  395.  
  396.  
  397. The Algorithm
  398. -------------
  399.  
  400. As G&S note, the form of the tree created is order dependent.  One good
  401. method of ensuring a better tree is to shuffle the order of the list.  This can
  402. be done by:
  403.  
  404.     given a list of objects OBJ[1..N],
  405.     for I = 1 to N {
  406.         R = random integer from 1 to N
  407.         swap OBJ[I] and OBJ[R]
  408.     }
  409.  
  410. Given the list of N objects, form bounding boxes for each and calculate the
  411. area.  The area of the bounding box enclosing an object is proportional to:
  412.  
  413.     Probability of hit == P = X*(Y+Z)+Y*Z
  414.  
  415. and this is all we need to calculate, since we're using these areas relative
  416. to one another.
  417.  
  418. The first object is considered as a root node of a tree structure, simply:
  419.  
  420.     {OBJ[1]}        Tree #1 - the initial tree
  421.  
  422. and the other nodes are added to this tree one by one in optimal places.
  423.  
  424.  
  425. Node Placement
  426. --------------
  427.  
  428. Start with the second node and look at the root of the tree.  The root will
  429. be either an object or a bounding volume (well, for the second node it will
  430. be an object, after that it'll be a bounding volume.  We're presenting this
  431. algorithm in this fashion because this section will be used recursively
  432. throughout the root's children).
  433.  
  434. Root node is an object: In this case, the new object (call it OBJ[2]) will form
  435. a binary tree with the root node, as follows.
  436.  
  437.         {BV[1]}        Tree #2 - adding an object to tree #1
  438.            |              (First Method)
  439.     +----------+----------+
  440.     |                     |
  441.     {OBJ[1]}          {OBJ[2]}
  442.  
  443. A bounding volume was created which contains both objects, and the bounding
  444. volume became the root node.
  445.  
  446. Root node is a bounding volume: In this case, three different possible paths
  447. can be taken when adding a new object to the tree. 
  448.  
  449. The first is simply to add a binary tree structure as above, with one child
  450. being the old root and the other child being the new object.  For example,
  451. adding a new object (OBJ[3]) in this fashion to tree #2 above yields:
  452.  
  453.                {BV[2]}    Tree #3 - Adding object #3 to tree #2
  454.                   |              (First Method)
  455.            +----------+----------+
  456.            |             |
  457.         {BV[1]}             {OBJ[3]}
  458.            |
  459.     +----------+----------+
  460.     |                     |
  461.     {OBJ[1]}          {OBJ[2]}
  462.  
  463. Again a new bounding volume has been created and made the root node.
  464.  
  465. The second method for adding to a bounding volume root node is to simply
  466. add the new object as a new child (leaf) node:
  467.  
  468.         {BV[1']}    Tree #4 - adding an object to tree #1
  469.            |              (Second Method)
  470.     +----------+----------+---------------------+
  471.     |                     |                |
  472.     {OBJ[1]}          {OBJ[2]}        {OBJ[3]}
  473.  
  474. Note that the bounding volume root node may increase in size.  This new
  475. bounding volume is noted as BV[1'] to note this possible change.
  476.  
  477. The third method is to not add the new object as a sibling or a child of
  478. the root, but rather to add it as a grandchild, great-grandchild or lower.
  479. In this case, some child is picked as the most efficient to accomodate the new
  480. object.  This child then acts like the root node above and the new object is
  481. added in the same fashion, by choosing one of the three methods (or, if it is
  482. a leaf node, automatically selecting the first method).  The next section deals
  483. with deciding which method is the most efficient.
  484.  
  485.  
  486. Selection Process
  487. -----------------
  488.  
  489. The goal behind creating the tree is to minimize the average number of
  490. intersection tests which must be performed.  By looking at the extra costs
  491. added by adding an object at various points we can select the least expensive
  492. option.
  493.  
  494. The costs are based on the area of the objects, which represents the
  495. probability of the objects being hit by a ray.  The scheme is to test what
  496. the additional cost is for method one and for method two and record which is
  497. better.  This cost is termed the "local best cost".  For the root node this
  498. cost is also saved as the "best cost", and the method and item are also saved.
  499. Then method three is used, selecting the child thought to be most efficient for
  500. adding the new object.  An "inheritance cost" is calculated for method three,
  501. which is passed on to the child.  This cost is essentially the expense to the
  502. parents of adding the object to the tree.  It occurs only when the parent
  503. bounding volume must increase in size to accomodate the new object.  The term
  504. "inheritance cost" will mean the cost addition calculated at the level, which
  505. is the sum of the "parent inheritance cost", inherited from above, and the
  506. "local inheritance cost", the extra cost due to this level.
  507.  
  508. The child selected is then checked for its cost using methods one and two.  If
  509. the local best cost plus the parent inheritance cost is better than the best
  510. cost of earlier parents, the best cost, method, and location are updated.  We
  511. now check method three to look for an efficient child of this child.  If the
  512. inheritance cost (which will be the sum of the local inheritance cost found at
  513. this level plus the parent inheritance cost from earlier) is greater than the
  514. best cost, method three does not have to be pursued further on down the tree.
  515. This halting is valid because no matter where the node would be added further
  516. down the tree, the cost will never be better than the best cost.
  517.  
  518. Otherwise, this whole procedure continues recursively on down the tree until
  519. method three can no longer be performed, i.e. the inheritance cost is higher
  520. than the best cost or the selected testing node is an object (leaf) node.  At
  521. this point, whichever node has been chosen as the best node is modified by
  522. method one or two.  Note that method three is not a true modification, but
  523. rather is just a recursive mechanism, pushing the testing by methods one and
  524. two down the tree.  After performing the changes to the tree structure, the
  525. parent boxes are increased in volume (if need be) to accomodate the new
  526. object.
  527.  
  528.  
  529. Efficiency Criteria
  530. -------------------
  531.  
  532. Well, we've been talking in a vacuum up to now about how to calculate the
  533. average number of ray intersections performed for a tree.  We perform the same
  534. calculations as G&S to determine the average--see that article for a
  535. good explanation.  We also take their advice and not worry about the probability
  536. of hitting the root node, and so multiply our probability equation by the
  537. proportional volume of the root node.  The practical effect is that this avoids
  538. a number of pointless divisions, since we just want to calculate relative
  539. costs of adding the object to the structure and don't really want the actual
  540. average ray/tree intersection value.
  541.  
  542. The cost for method one: what happens here is that a bounding volume is
  543. created and its two children are the original test node and the new object.
  544. We will use trees #1 and #2 to derive the cost calculations.  The initial
  545. probability cost of hitting OBJ[1] are simply:
  546.  
  547.     old cost = 1
  548.  
  549. This is the because the topmost node is always tested.
  550.  
  551. The new probability cost is the cost of hitting the bounding volume and
  552. intersecting the two objects inside the bounding volume.  Essentially:
  553.  
  554.     new cost = 1 + 2 * P(BV[1])
  555.  
  556. This formula can be interpreted as follows.  One ray intersection is done to
  557. intersect the bounding volume.  If this volume is hit, two more ray intersection
  558. tests must be done to check the two objects contained within.  From these two
  559. equations we can calculate the difference, which is:
  560.  
  561.     cost difference = 2 * P(BV[1])
  562.  
  563.  
  564. The cost for method two: what happens here is that the new object is added to
  565. the existing bounding volume.  Using trees #2 and #4 for demonstration, the old
  566. cost is:
  567.  
  568.     old cost = 1 + k * P(BV[1])
  569.  
  570. where k is the number of children (in our example, it's 2).  The new cost is:
  571.  
  572.     new cost = 1 + (k+1) * P(BV[1'])
  573.  
  574. with P(BV[1']) being the new area of the bounding volume.  The difference is:
  575.  
  576.     cost difference = ( P(BV[1']) - P(BV[1]) ) * k + P(BV[1'])
  577.  
  578.  
  579. The inheritance cost for method three: the cost incurred will be the difference
  580. between intersecting children times the old parent's area and intersecting
  581. children times the new parent's volume.  The old cost is:
  582.  
  583.     old cost = 1 + k * P(BV[1])
  584.  
  585. The number of children is the same for the new cost (i.e. the new object will
  586. be added on down the line by method one or two, which always ends up with one
  587. root node), so the only thing that can change is the volume:
  588.  
  589.     new cost = 1 + k * P(BV[1'])
  590.  
  591. The difference:
  592.  
  593.     cost difference = ( P(BV[1']) - P(BV[1]) ) * k
  594.  
  595. With these criteria in hand, we can now actually try the method out.
  596.  
  597.  
  598. Example
  599. -------
  600.  
  601. There are four tiles of a checkerboard to be ray traced, which, after
  602. shuffling, are as shown:
  603.  
  604.     +---+---+
  605.     | 1 | 3 |
  606.     +---+---+
  607.     | 4 |
  608.     +---+
  609.     | 2 |
  610.     +---+
  611.  
  612. We start with a tree consisting of tile #1, with area 1.
  613.  
  614. Adding tile #2, we automatically come up with a tree:
  615.  
  616.         BV* (area 3)
  617.          |
  618.     +--------+----------+
  619.     |            |
  620.     1 (area 1)        2 (area 1)
  621.  
  622. Note: BV* means the new BV being added, BV' means an old BV possibly increasing
  623. in size.
  624.  
  625. Looking at tile #3, we try out method one:
  626.  
  627.                BV* (area 6)
  628.                 |
  629.          +----------+----------+
  630.          |               |
  631.         BV (area 3)           3 (area 1)
  632.          |
  633.     +--------+----------+
  634.     |            |
  635.     1 (area 1)        2 (area 1)
  636.  
  637. The cost difference is simply 2 times the new BV area, i.e. 12.
  638.  
  639. We also look at the cost of method 2:
  640.  
  641.                BV' (area 6)
  642.                  |
  643.     +-------------------+---------------------+
  644.     |            |              |
  645.     1 (area 1)        2 (area 1)          3 (area 1)
  646.  
  647. The cost is (new area - old area) * 2 children + new area = (6-3)*2 + 6 = 12.
  648. Since this is the same as method one, either method one or method 2 can be
  649. selected, with the best cost being 12.
  650.  
  651. Method 3 is now applied, looking at each child and using methods one and two
  652. on them.  The inheritance cost is (new area - old area) * 2 children =
  653. (6-3)*2 = 6.  Each child is an object (leaf) node, so only method one can be
  654. used.  Trying this on object 1:
  655.  
  656.                BV' (area 6)
  657.                 |            inheritance = 6
  658.          +----------+----------+
  659.          |               |
  660.         BV* (area 2)           2 (area 1)
  661.          |
  662.     +--------+----------+
  663.     |            |
  664.     1 (area 1)        3 (area 1)
  665.  
  666. The local cost is 2 * new area, i.e. 4.  The cost including the inheritance
  667. is 4 + 6 = 10, which is lower than our earlier best cost of 12, so performing
  668. method one on object 1 is now the best solution.
  669.  
  670. Trying method 1 on object 2 we get:
  671.  
  672.                BV' (area 6)
  673.                 |            inheritance = 6
  674.          +----------+----------+
  675.          |               |
  676.          1 (area 1)          BV* (area 6)
  677.                          |
  678.                         +----------+----------+
  679.                 |              |
  680.                 2 (area 1)          3 (area 1)
  681.  
  682. The increase in cost is 2 * new area, i.e. 12.  This plus the inheritance of
  683. 6 is 18, which is certainly horrible (as we would expect).  So, we end out
  684. with the best solution being replacing the node for object 1 with a BV which
  685. contains objects 1 and 3, shown earlier.
  686.  
  687. For object 4, we again test method one:
  688.  
  689.                       BV* (area 6)
  690.                        |
  691.                 +----------+----------+
  692.                 |              |
  693.                BV (area 6)              4 (area 1)
  694.                 |
  695.          +----------+----------+
  696.          |               |
  697.         BV (area 2)           2 (area 1)
  698.          |
  699.     +--------+----------+
  700.     |            |
  701.     1 (area 1)        3 (area 1)
  702.  
  703. The local cost is 2 * new area, i.e. 12.  Trying out method two:
  704.  
  705.                          BV (area 6)
  706.                            |
  707.          +---------------------+---------------------+
  708.          |               |             |
  709.         BV (area 2)           2 (area 1)         4 (area 1)
  710.          |
  711.     +--------+----------+
  712.     |            |
  713.     1 (area 1)        3 (area 1)
  714.  
  715. The cost is (new area - old area) * 2 children + new area = (6-6)*2 + 6 = 6.
  716. This is the better of the two methods, so method two applied to the root is
  717. noted as the best cost of 6.
  718.  
  719. Method 3 is now applied, looking at each child and using methods one and two
  720. on them.  The inheritance cost is (new area - old area) * 2 children =
  721. (6-6)*2 = 0.  The first child is the BV containing objects 1 and 3, so we try
  722. method 1:
  723.  
  724.                       BV (area 6)
  725.                        |        inheritance = 0
  726.                 +----------+----------+
  727.                 |              |
  728.                BV* (area 4)          2 (area 1)
  729.                 |
  730.          +----------+----------+
  731.          |               |
  732.         BV (area 2)           4 (area 1)
  733.          |
  734.     +--------+----------+
  735.     |            |
  736.     1 (area 1)        3 (area 1)
  737.  
  738. The cost is 2 * new area + inheritance = 8, which is not better than our
  739. previous best cost of 6.  Method two yields:
  740.  
  741.                         BV (area 6)
  742.                          |        inheritance = 0
  743.                   +----------+----------+
  744.                   |                |
  745.                  BV' (area 4)        2 (area 1)
  746.                   |
  747.     +---------------------+---------------------+
  748.     |              |                |
  749.     1 (area 1)          3 (area 1)        4 (area 1)
  750.  
  751. The cost is (new area - old area) * 2 children + new area = (4-2)*2 + 4 = 8,
  752. which, plus the inheritance cost of 0, is not better than our previous best
  753. cost of 6.
  754.  
  755. Now we try method one on the second node of the tree, i.e. object 2:
  756.  
  757.                         BV (area 6)
  758.                           |
  759.          +--------------------+--------------------+
  760.          |                              |
  761.         BV (area 2)                         BV* (area 2)
  762.          |                       |
  763.     +--------+----------+            +----------+----------+
  764.     |            |            |              |
  765.     1 (area 1)        3 (area 1)        2 (area 1)          4 (area 1)
  766.  
  767. Again, the cost is 2 * new area + inheritance = 2 * 2 + 0 = 4.  This beats
  768. our best cost of 6, so this is the optimal insertion for object 4 so far.
  769. Since this cost is also better than the best cost of 8 for the first child,
  770. this branch is the best child to pursue further on down (though we can't go
  771. further).  This means that we do not have to try methods one for object 4 on
  772. the first child's children (objects 1 and 3).  Confused?  Well, that's life.
  773. Try examples of your own to see how the algorithm works.
  774.  
  775.  
  776. Improvements
  777. ------------
  778.  
  779. G&S say they check which child node will be tested further by which has
  780. the smallest increase in area when the new object is added to it.  In case of
  781. ties (which occur mostly when the area doesn't increase at all), they give a
  782. few possible sub-criteria for choosing.  However, by the logic of bounding
  783. volumes, the real test that should be done is to pick the bounding volume which
  784. gives the best result when methods one and two are applied to it.
  785.  
  786. To prove this by example, imagine a bounding volume containing two other
  787. bounding volumes, one huge (say it has 50% of the area of its parent) and one
  788. tiny (say it's 1%).  Let's say an object is inserted which would not increase
  789. the size of the 50% BV but would triple the size of the 1% BV to 3%.  By
  790. Goldsmith's criterion we must pick the 50% BV to insert the object into.  Now
  791. if we intersect the root node we will hit the 50% BV half the time, and so must
  792. then do the other object intersection half the time.  If instead we had picked
  793. the 3% BV, this would be hit 3% of the time, meaning that we would have to do
  794. the object test only 3% of the time.  In both cases we had to test each BV, but
  795. it was smarter of us to put the object in the smaller BV in order to avoid
  796. testing.  This case will be caught by testing the increases for methods one and
  797. two for the BV's.  Method one for the larger would yield 50%*2 and method two
  798. 50%*1, giving 50% as the best cost.  For the tiny BV, method one yields
  799. 3%*2 = 6% and method two (3%-1%)*2 + 3% = 7%, giving 6% as the best cost,
  800. obviously much better.  Even though we have increased the chance of having to
  801. open the smaller box, it's still cheaper to do this than to add the object to
  802. a box which is much more likely to be hit.
  803.  
  804. -----------------------------------------------------------------------------
  805.  
  806. Best of USENET:
  807.  
  808. From: cyrus@hi.unm.edu (Tait Cyrus)
  809. Newsgroups: comp.graphics
  810. Subject: images
  811. Organization: U. of New Mexico, Albuquerque
  812.  
  813. It seems that once a month someone asks where they can get
  814. ahold of some images to play with.  Well, for those of you
  815. looking for images to "play" with, I have some images
  816. available that you can have.  They are available via
  817. anonymous ftp on hc.dspo.gov (26.1.0.90).  The images are
  818. in pub/images.  There are two directories 'old' and 'new'.
  819. Both contain images as well as a README.  The README's
  820. describe the sizes of the images and basically what the
  821. images are of.  Because of disk space constraints, all of the
  822. images are compressed.  All of the images, but one, are
  823. grey scale.  The other is an image of a mandrill in color.
  824. Three files make up the madrill, one for green, red and
  825. blue.
  826.  
  827. Currently there are 20 images.  As time goes on this number
  828. will be increasing (I hope), so if you are interested in
  829. images, you might want to check once a month or so to see
  830. if there are any new ones.
  831.  
  832. If you have any images which you would like to make available,
  833. please let me know.  I would like to put them with the ones
  834. I currently have (kind of like a repository).
  835.  
  836. More:
  837.  
  838. Several people have asked me for some more details concerning the images
  839. I have made available on hc.dspo.gov (26.1.0.90).  Again, the images
  840. are available via anonymous ftp and are in /pub/images.  There are 2
  841. directories, 'new' and 'old' which contain the 20 or so images.
  842. Both have README's which describe the images and the sizes of the images.
  843.  
  844. The images are compressed, the README's are NOT.  If your system does
  845. not have uncompress (you might check with your system manager first
  846. to make sure) I have put the source for compress/uncompress in /pub
  847. of the same machine.
  848.  
  849. The images are all grey scale, except for mandrill.  The grey
  850. scale images are such that each pixel is represented by one
  851. byte (value of 0 = black, 255 = white).
  852.  
  853. Hope this helps any of you who were confused or were having troubles.
  854.  
  855.  
  856. >From: todd@utah-cs.UUCP (Todd Elvins)
  857. Newsgroups: comp.graphics
  858. Subject: New model of an espresso maker
  859. Organization: University of Utah CS Dept
  860.  
  861. I have installed a file called 'espresso.polys' on the ftp directory
  862. at cs.utah.edu
  863.  
  864. It is a model of one of those aluminum italian made espresso makers.
  865.  
  866. T. Todd Elvins  IFSR
  867. ({ucbvax,ihnp4,decvax}!utah-cs!todd, todd@cs.utah.edu)
  868. "Eat, drink, and be merry, for tomorrow you might be in Utah."
  869.  
  870. END OF RTNEWS
  871.  _ __                 ______                         _ __
  872. ' )  )                  /                           ' )  )
  873.  /--' __.  __  ,     --/ __  __.  _. o ____  _,      /  / _  , , , _
  874. /  \_(_/|_/ (_/_    (_/ / (_(_/|_(__<_/ / <_(_)_    /  (_</_(_(_/_/_)_
  875.              /                               /|
  876.             '                               |/
  877.  
  878.             "Light Makes Right"
  879.  
  880.              June 20, 1988
  881.  
  882. Compiled by Eric Haines, 3D/Eye Inc, ...!hplabs!hpfcla!hpfcrs!eye!erich
  883. All contents are US copyright (c) 1988 by the individual authors
  884.  
  885. Contents:
  886.     New people and addresses (David Lister, Pete Segal, Paul Heckbert)
  887.     Non-article on RenderMan and Dore' (Eric Haines)
  888.     Ray Tracing Bibliography Update (Paul Heckbert & Eric Haines)
  889.     Commercial Ray Tracing Software (Eric Haines)
  890.     Benchmarks (Jeff Goldsmith)
  891.  
  892. So, I've regained the desire to type again a mere month after the SIGGRAPH
  893. course notes deadlines.  Not much in the queue, but I thought I'd pass on what
  894. little there is.  The most interesting developments which affect ray tracing
  895. are the release of the RenderMan (tm) interface by Pixar and the publication
  896. of Ardent's Dore' (tm) Programmer's Guide and Reference Manual.
  897.  
  898. Andrew Glassner's hardcopy "RT News" is coming out soon - if you're not on the
  899. mailing list, write him.
  900.  
  901. SIGGRAPH Ray Tracers Roundtable:  in case you don't know, this is an informal
  902. get-together during SIGGRAPH where we talk about ray tracing techniques and
  903. trends.  Personally, I'd like to aim for about the same time as last year:
  904. Thursday, sometime after 5 pm (with people then hitting the technical reception
  905. for food afterwards).  Same as last year, we'll leave notes at the message
  906. center to all subscribers as to exactly where and when.  If you're not planning
  907. to attend SIGGRAPH, please save me some note-writing effort by telling me.
  908. Otherwise, see you there.
  909.  
  910. -----------------------------------------------------------------------------
  911.  
  912. New people and addresses
  913. ------------------------
  914.  
  915. Paul Heckbert's summer address (at Xerox PARC):
  916.  
  917.     heckbert.pa@xerox.com
  918.  
  919. Mail will still (slowly but surely) reach Paul at his old Berkeley address.
  920.  
  921.  
  922. # David Lister
  923. # Data General Corp.
  924. # 62 T. W. Alexander Drive
  925. # Research Triangle Park, NC   27709
  926. # (919) 248-6223
  927. alias    david_lister    hpfcrs!hpfcla!hplabs!lister@dg-rtp.dg.com
  928.  
  929. From David:
  930.  
  931. I have been working on Ray Tracing since 1984 while I was a graduate
  932. student at The Ohio State University.  I am still working on my thesis
  933. for my MSEE on parallelism and algorithm improvements for Ray Tracing.
  934. My areas of Ray Tracing interest include the following:
  935.  
  936. 1). algorithm efficency
  937. 2). simulation of natural phenomenon (optical characteristics of materials)
  938.  
  939. and,
  940.  
  941. 3). parallelism.
  942.  
  943. David Lister
  944.  
  945.  
  946. # Pete Segal
  947. # AT&T Pixel Machines
  948. # Room 4K-208
  949. # Crawfords Corner Road
  950. # Holmdel, NJ  07733
  951. # (201)-949-1244
  952. alias    pete_segal    hpfcrs!hpfcla!ihnp4!homxc!pixels!pls
  953.  
  954. From Pete:
  955.  
  956.    I'm not real big on introductions, but here goes...
  957.  
  958.    I was born the son of a poor black sharecropper... wait, wrong story....
  959.    
  960.    I started in the Computer graphics lab at RPI in 1979, got my Master's
  961. in '82 and came to Bell Labs doing graphics for CAD systems.  I moved to 
  962. Pixel Machines in early 1987 and have been working there since.  I am 
  963. interested in 3d rendering and animation, and I am currently working on
  964. the Ray tracing library for the Pixel Machine, RAYlib.
  965.  
  966. -----------------------------------------------------------------------------
  967.  
  968. Non-article on RenderMan and Dore' (by Eric Haines)
  969.  
  970. What follows is a non-review of RenderMan and Dore'.  If you've been looking
  971. for a chance to contribute to the RT News, here's your chance - I'm not
  972. planning on reviewing either of these in depth, but would love to hear others'
  973. opinions (even anonymous ones) of these packages.
  974.  
  975. I just received a copy of Pixar's "RenderMan" interface.  To quote the
  976. preface:
  977.  
  978.     The RenderMan interface is designed so that the information needed to
  979.     specify a photorealistic image can be passed to different rendering
  980.     programs compactly and efficiently. ... In order to achieve this,
  981.     the interface does not specify how a picture is rendered, but instead
  982.     what picture is desired. ... The RenderMan interface is a collection
  983.     of procedures to transfer the description of a scene to the rendering
  984.     program.
  985.  
  986. The interface for the ray tracer is wonderfully short, as it is simply another
  987. command in Pixar's shading language.  I include it here in full:
  988.  
  989. 18.4.5 RAY TRACING
  990.  
  991. color trace( point R )
  992.  
  993.     "trace" returns the incident light falling on a surface in a given
  994.     direction R.  If a particular implementation does not support ray
  995.     tracing, and cannot compute the incident light arriving from an
  996.     arbitrary direction, trace will return 0 (black).
  997.  
  998. That's it.  I don't see any way this command can support shadowing or
  999. filtering, but I haven't read through the document carefully (Pixar seems
  1000. to want to go with their "Shadow Depth Maps" instead - SIGGRAPH 87 paper).
  1001.  
  1002. Anyway, this interface is "endorsed" by Apollo, DEC, Stellar, Ardent, and
  1003. Sun, so it seems to be a happening something.  I'm not sure what "endorsement"
  1004. means, exactly, but one thing it means is that you should probably check it out.
  1005.  
  1006.  
  1007. Dore':  well, I received the two preliminary manuals yesterday.  As such,
  1008. about all I can commit myself to is: "nice packaging - very artsy binders".
  1009. Reviews, please?
  1010.  
  1011. -----------------------------------------------------------------------------
  1012.  
  1013. Ray Tracing Bibliography Update (Paul Heckbert & Eric Haines)
  1014.  
  1015. Paul Heckbert's "Ray Tracing Bibliography" has been updated for May, 1988.
  1016. It will appear in the next issue of the hardcopy "Ray Tracing News" and in the
  1017. SIGGRAPH '88 "Introduction to Ray Tracing" course notes.  If you would like to
  1018. see it before then, or would just like to have an electronic version on hand,
  1019. please write Eric Haines and I'll mail you the latest version.  Also, if you
  1020. do get a copy, please tell us of any errata or addenda you may have for it.
  1021.  
  1022. -----------------------------------------------------------------------------
  1023.  
  1024. Commercial Ray Tracing Software, by Eric Haines
  1025. -------------------------------
  1026.  
  1027. I'm collecting information for the "Consumer's and Developer's Guide to Image
  1028. Synthesis" course at SIGGRAPH this year - namely, companies selling ray tracers.
  1029. The bare bones info is at the end of this issue.  I'm in the midst of ordering
  1030. manuals, but that's about as far as I'm going.  So, I would like to hear from
  1031. anyone who knows anything about these packages.  I will keep all reviews
  1032. confidential, unless you explicitly state otherwise.
  1033.  
  1034. Below is a partial list of groups (in alphabetical order) offering ray tracing
  1035. packages.  If you know of any others, please clue me in (I'm particular
  1036. ignorant when it comes to software for animators & advertising, such as
  1037. Wavefront.  For now, I have left them off the list below).  The "Contact"
  1038. section first lists the person who I have dealt with, followed by the official
  1039. contact address and/or phone number.  I believe the only company that won't
  1040. have representation on the floor at SIGGRAPH is Ray Tracing Corp (though UCS
  1041. probably will, in some form).  Oh, just to dispell rumors, "Numerical Designs
  1042. Ltd", Turner Whitted's company, is not planning on announcing a ray tracer
  1043. by SIGGRAPH 88.  Instead, they are marketing a package based on using pipes
  1044. and filters for rendering (beyond this, I do not know...).
  1045.  
  1046.  
  1047.  
  1048. AT&T, Pixel Machines "RAYlib".  Available only on the Pixel Machine.
  1049.  
  1050.     Cost: ???, manuals available realsoonnow.
  1051.  
  1052.     Contact: Ken Krause, 201-563-2274.
  1053.          AT&T Pixel Machines
  1054.          1-800-544-0097
  1055.  
  1056.  
  1057. Ardent, "Dore'".  Available on Ardent's Titan superworkstation.  Source
  1058.     available in C, portable to other machines.
  1059.  
  1060.     Cost: $250 for universities, research sites.  $15000/$5000 per year
  1061.     for commercial sites.  Binary license $200 per copy.  Programmer's
  1062.     Guide and Reference Manual preliminary versions are $25 each.
  1063.  
  1064.     Contact: Ardent Computer Corporation,
  1065.          880 West Maude Avenue,
  1066.          Sunnyvale, CA  94086
  1067.          408-732-0400
  1068.  
  1069.  
  1070. Hewlett Packard.  Add-on to their existing "Starbase" graphics package,
  1071.     which will also include radiosity software.  Announced at NCGA 1988.
  1072.     Available with the TurboSRX come the end of the year (?).
  1073.  
  1074.     Cost: ???
  1075.  
  1076.     Contact: Hewlett Packard Co.
  1077.          1-800-752-0900, Ext. 782A
  1078.  
  1079.  
  1080. Integra (via Mitsubishi, via Enimax), "Turbo Beam Tracing".  Available on IBM
  1081.     PC/AT or compatible.
  1082.  
  1083.     Cost: ??? (will be shown at SIGGRAPH)
  1084.  
  1085.     Contact: Gregory Szewczyk
  1086.          Enimax International Inc.
  1087.          113 Martin Grove Road
  1088.          Etobicoke, Ontario M9B 4K7
  1089.          CANADA
  1090.          416-234-9120
  1091.  
  1092.  
  1093. Ray Tracing Corp, "TRACER" and "TRACER PC".  Source available in FORTRAN 77.
  1094.     "TRACER" runs on Cray, VAX, and many Unix-based systems.  "TRACER PC"
  1095.     is for the IBM PC, 640K memory, 20 Mb hard disk, math co-processor,
  1096.     and Targa or Number Nine card.  "TRACER PC" includes a modeler.
  1097.  
  1098.     Cost: $3000 for source and first year of updates.  Manual for $25.
  1099.  
  1100.     Contact: Mark Franklin
  1101.          Ray Tracing Corporation
  1102.          2516 Via Tejon, Suite 316
  1103.          Palos Verdes Estates, CA  90274
  1104.          213-373-0520
  1105.  
  1106.  
  1107. United Computer Systems, Inc, "Ray Tracer".  Available on Apollo, IBM, and
  1108.     Mac.  Evidentally selling well on Mac and IBM: 4x sales than Apollo
  1109.     sales since intro post-SIGGRAPH '87.  It turns out that this product
  1110.     is actually made by Ray Tracing Corp.
  1111.  
  1112.     Cost: ???, manual available for $25.
  1113.  
  1114.     Contact: Alan Brown (at TMAC (sp?)), 213-475-1067
  1115.          United Computer Systems, Inc
  1116.          Graphics Development Group
  1117.          10564 Progress Way
  1118.          Cypress, CA  90630
  1119.          714-220-2931
  1120.  
  1121.  
  1122. Wavefront Technologies, Inc, "3-D Dynamic Imaging System".  Their system has
  1123.     "production speed ray tracing" as a feature.
  1124.  
  1125.     Cost: ???
  1126.  
  1127.     Contact: Wavefront Technologies
  1128.          530 East Montecito Street
  1129.          Santa Barbara, CA  93103
  1130.          (805)-962-8117
  1131.  
  1132. -----------------------------------------------------------------------------
  1133.  
  1134. Benchmarks, by Jeff Goldsmith
  1135.  
  1136. [This recently appeared in the email newsletter on scientific visualization
  1137. that Jeff Goldsmith has been editing.  If you're interested in subscribing
  1138. and contributing to the SciVi discussion group, contact him at:
  1139. jeff@hamlet.caltech.edu .  I thought it of interest because of the bounding
  1140. box intersector statistics. - EAH]
  1141.  
  1142. I did an interesting micro-project this winter/spring.  We were
  1143. interested in porting some programs to PCs and/or Workstations, so
  1144. I compared the performance of a few chunks of graphics code on a bunch
  1145. of machines.  The code was supposed to represent some of the typical
  1146. cpu and I/O intensive things that graphics programs tend to do.
  1147.  
  1148. The benchmarks are:
  1149.     Faults:    randomly accesses a huge array (>16 Megabytes)
  1150.         (I know--not huge to you Cray users, but it is
  1151.         to PCs)  Obviously, tests virtual memory usage.
  1152.     Shade: typical shading routine.  Tests floating point
  1153.         very strongly.
  1154.     Bbox: highly optimized bounding box intersection routine
  1155.         for a ray tracer.  (actually, this one has become
  1156.         somewhat unoptimized for the testing, but you get
  1157.         the idea)  Was intended to test floating point
  1158.         performance and if-then-else branching.  Actually,
  1159.         tests floating point and caching.
  1160.     Clear: sequentially clears a large memory array.  Tests
  1161.         compiler, MIPS, and memory usage.
  1162.     Sub: calls an empty subroutine repeatedly.  Tests MIPS.
  1163.     Fread: formatted reads and writes.  Tests I/O speed, floating
  1164.         point performance and MIPS.
  1165.     Uread: binary reads and writes.  Tests raw I/O speed.
  1166.  
  1167.  
  1168. Machine    faults    shade    bbox    clear    sub    fread    uread
  1169. ------- ------  -----    ----    -----    ---    -----    -----
  1170. VAX780    12.5    16.9    12.3    11.8    19.3    17.4    23.2
  1171. uVAX II 22.2    18.5    15.6    12.9    18.9    24.0    29.1
  1172. HP320    *    10    45    4    8    5    6
  1173. HP350    4    5    28    3    4    3    4
  1174. Sun 3/1    *    9    34    4    6    5    5
  1175. Sun 3/2 *    9    48    3    3    2    4
  1176. Sun 386 *    9.5    16    2    5    3    1
  1177. Mac II    *     31.3    44.3    *    4.3    13    5.3
  1178. PC/AT    *     70    180    *    39    17    6
  1179. PS 2/80 *    9.4    49.7    *    11.1    11.4    7.3
  1180. Compaq    ~    ~    ~    ~    19.0    13.1    5.5
  1181. Iris    *    30    59    4    5    15    3
  1182. IrisFPA *    11    13    4    5    6    3
  1183.  
  1184. All entries are in seconds to run specified benchmark.
  1185. * indicates that operating system not set up to allow
  1186.    program to run.
  1187. ~ indicates benchmark not attempted.
  1188.  
  1189. The machines tested:
  1190.     VAX780:    Vax 11/780 with FPA and 32 Mbytes memory
  1191.     uVAX II:  Microvax II, VMS, 16 Mbytes memory
  1192.     HP320: Unix
  1193.     HP350: SRX, Unix, 32 Mbytes memory
  1194.     Sun 3/1: Sun 3/160, 68881 co-processor
  1195.     Sun 3/2: Sun 3/260, 68881 co-processor
  1196.     Sun 386: Sun 386i/250, 80386/80387, Unix
  1197.     Mac II: MPW, 68881
  1198.     PC/AT: Xenix, 80287
  1199.     PS 2/80: OS2, 80387 co-processor
  1200.     Compaq: Compaq 386, Unix, no coprocessor
  1201.     Iris: SGI IRIS 3030 without FPA
  1202.     IrisFPA: SGI IRIS 3030 with FPA
  1203.     (Iris 3130 performance was identical to 3030.)
  1204.  
  1205.  
  1206. What did I learn from all this?  One thing is obvious: if a 
  1207. FPA is available for your machine and you can afford it (they
  1208. are usually cheap) buy it even if you don't do alot of floating
  1209. point.  It affects all sorts of performance characteristics.
  1210. Another important point: it is not possible to evaluated computer
  1211. performance as one number.  Different computers do different things
  1212. well.  
  1213.  
  1214. -----------------------------------------------------------------------------
  1215. END OF RTNEWS
  1216.